package com;

import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;

/**
 * 正则表达式 : 定义了字符串模式,可以用来搜索编辑,处理文本,但是不仅限于某一种语言,但是在各种语言中有细微的差别
 * 
 * 常用语法 : 
 * 		\ 转义,把有意义的字符,转换为无意义的字符
 * 
 * 		[abc] : 表示可能是a ,可能是 b ,可能是 c
 * 		[^abc] : 表示不是 abc 中的任意一个
 * 		[a-z] : 表示 匹配 小写字母
 * 		[A-Z] : 表示匹配大写字母
 * 		[a-zA-Z] : 表示匹配大小写字母
 * 		[0-9] : 表示匹配数字
 * 
 * 简答的表示形式 : 
 * 		. : 匹配任意字符
 * 		\d : 表示数字 [0-9]
 * 		\D : 表示非数字[^0-9]
 * 		\s : 表示由空字符组成 [\t\n\r\x\f]
 * 		\S : 表示非空字符组成 [^\t\n\r\x\f] [^\s]
 * 		\w : 表示是字母数字,下划线[a-zA-Z0-9]
 * 		\W : 表示非字母数字,下划线[^a-zA-Z0-9]
 * 
 * 数量表示
 * 
 * 		? : 表示出现 0 次或 多次
 * 		+ : 表示出现1次或多次
 * 		* : 表示出现 0 次或多次
 * 		{n} : 匹配 N 次
 * 		{n,} : 匹配 n 次或n次以上
 * 		{n,m} : 匹配n到m次
 * 
 * ()  匹配整体
 * 
 * Pattern : 
 * 		验证 : matches
 * 		拆分 : split
 * 		替换 : replaceAll
 * 
 * @author lenovo
 * @date 2020年7月23日
 */
public class _01_PatternTest {
	public static void main(String[] args) {
		//匹配整数和小数 ^\\d+(\.\d+)?
		//电话 \d{11}  ^1[345789]\d{9}$
		test1();
		test2();
	}
	/**
	 * String[] split(CharSequence input) ;
	 * Pattern 类中的成员方法,用于分割字符串
	 */
	public static void test1() {
		String str = "1.2.3";
		//创建一个正则表达式
		Pattern pattern = Pattern.compile("\\.");
		//以逗号分割,返回字符数组
		String[] strArray = pattern.split(str);
		
		//把数组转换为集合
		List<String> strs = Arrays.asList(strArray);
		System.out.println(strs);
		
		//String 中的
		strArray = str.split("\\.");
		
	}
	/**
	 * matches 静态方法, 返回值为 boolean ,用于快速匹配字符串,并且是全词匹配
	 */
	public static void test2() {
		String string = "12345678910";
		String regex = "\\d{11}";
		System.out.println(Pattern.matches(regex, string));
		System.out.println(string.matches(regex));
	}
}
